const config=require('./config')
const login=require('./login')
const baseRequest=require('./baseRequest')
const common=require('./common')

/**
 * get到服务器并返回内容
 * @param {string} func 功能
 * @param {string} action 方法
 * @param {any} data 参数以名值对格式传送
 * @returns {Promise<any>} 接口返回内容
 */
const get=async function(func,action,data){
  wx.showLoading({
    title: '载入中',
  })
  try{
    const response=await new Promise(async(resolve, reject)=>{
      const headers={}
      const jwtPayload=await login.getJwtPayload()
      if(jwtPayload){
        headers.authorization='Bearer '+jwtPayload
      }
      wx.request({
        url: config.baseUrl+func+"/"+action,
        data:{
          ...data
        },
        header:headers,
        success:(res)=>{
          if(res.statusCode>=200 && res.statusCode<300){
            resolve(res.data)
          }else{
            reject(common.error("服务器出错 代码"+res.statusCode,-1))
          }
        },
        fail:(res)=>{
          console.error("请检查网络",res)
          reject(common.error("请检查网络",-1))
        },
        complete:(res)=>{
          wx.hideLoading({
          })
        }
      })
    })
    return baseRequest.requestHandle(response)
  }catch(err){
    console.error("yunrequest error",err)
    return Promise.reject(err)
  }
}
/**
 * post json对到服务器并返回内容
 * @param {string} func 功能
 * @param {string} action 方法
 * @param {any} data 参数以json格式传送
 * @returns {Promise<any>} 接口返回内容
 */
const postJson=async function(func,action,data){
  wx.showLoading({
    title: '载入中',
  })
  try{
    const response=await new Promise(async(resolve, reject)=>{
      const headers={}
      const jwtPayload=await login.getJwtPayload()
      if(jwtPayload){
        headers.authorization='Bearer '+jwtPayload
      }
      wx.request({
        url: config.baseUrl+func+"/"+action,
        data:{
          ...data
        },
        method:'POST',
        header:headers,
        success:(res)=>{
          if(res.statusCode>=200 && res.statusCode<300){
            resolve(res.data)
          }else{
            reject(common.error("服务器出错 代码"+res.statusCode,-1))
          }
        },
        fail:(res)=>{
          console.error("请检查网络",res)
          reject(common.error("请检查网络",-1))
        },
        complete:(res)=>{
          wx.hideLoading({
          })
        }
      })
    })
    return baseRequest.requestHandle(response)
  }catch(err){
    console.error("yunrequest error",err)
    return Promise.reject(err)
    
  }
}
/**
 * post名值对到服务器并返回内容
 * @param {string} func 功能
 * @param {string} action 方法
 * @param {any} data 参数以名值对传送
 * @returns {Promise<any>} 接口返回内容
 */
const post=async function(func,action,data){
  wx.showLoading({
    title: '载入中',
  })
  try{
    const response=await new Promise(async(resolve, reject)=>{
      const headers={}
      const jwtPayload=await login.getJwtPayload()
      if(jwtPayload){
        headers.authorization='Bearer '+jwtPayload
      }
      headers['content-type']='application/x-www-form-urlencoded'
      wx.request({
        url: config.baseUrl+func+"/"+action,
        data:{
          ...data
        },
        method:'POST',
        header:headers,
        success:(res)=>{
          if(res.statusCode>=200 && res.statusCode<300){
            resolve(res.data)
          }else{
            reject(common.error("服务器出错 代码"+res.statusCode,-1))
          }
        },
        fail:(res)=>{
          console.error("请检查网络",res)
          reject(common.error("请检查网络",-1))
        },
        complete:(res)=>{
          wx.hideLoading({
          })
        }
      })
    })
    return baseRequest.requestHandle(response)
  }catch(err){
    console.error("yunrequest error",err)
    return Promise.reject(err)
  }
}
module.exports = {
  yunrequest:get,
  get,
  post,
  postJson
};